#include "Thread.hpp"
#include "ThreadTemplate.hpp"
#include<vector>
using namespace ThreadModule;
using namespace ThreadTemplateModule;

void TestThread1()
{
    Thread t([]()
             {
        while(true)
        {
            char name[128];
            pthread_getname_np(pthread_self(),name,sizeof(name));
            std::cout<<"我是一个新线程 "<<"name: "<<name<<std::endl;
            sleep(1);
        } });
    // t.Detach(); // 测试分离
    t.Start();
    t.Detach(); // 测试分离
    sleep(5);
    t.Stop();
    sleep(5);
    t.Join();
}

//创建多线程
void TestThread2()
{
    std::vector<Thread> threads;
    for(int i=0;i<10;i++)
    {
        threads.emplace_back([]()
             {
        while(true)
        {
            char name[128];
            pthread_getname_np(pthread_self(),name,sizeof(name));
            std::cout<<"我是一个新线程 "<<"name: "<<name<<std::endl;
            sleep(1);
        } });
    }
    for(auto &thread:threads)
    {
        thread.Start();
    }
    for(auto &thread:threads)
    {
        thread.Join();
    }
}

void Count(int cnt)
{
    while (cnt--)
    {
        std::cout << "我是一个新线程" << std::endl;
        sleep(1);
    }
}
void TestThreadTemplate()
{
    int cnt = 5;
    ThreadTemplate<int> t(Count, cnt);
    t.Start();
    t.Join();

    //我们也可以传递对象
}

int main()
{
     //TestThread1();
     TestThread2();
    //TestThreadTemplate();
    return 0;
}